#pragma once

#include <memory>
#include <map>
#include <string>

class IParameter
{
public:
	enum Type {Float, Bool};
	Type type;

	IParameter(Type type)
	{
		this->type = type;
	}

	~IParameter()
	{

	}
};

template<class T>
class Parameter : public IParameter
{
protected:
	Parameter(std::shared_ptr<T>& ptr)
		: IParameter()
	{
		this->ptr = ptr;
	}

	std::shared_ptr<T> ptr;

public:
	Parameter(Type type, std::shared_ptr<T>& ptr)
		: IParameter(type)
	{
		this->type = type;
		this->ptr = ptr;
	}

	~Parameter()
	{

	}

	std::shared_ptr<T> GetPtr()
	{
		return ptr;
	}

	void SetValue(T val)
	{
		*ptr = val;
	}
};
